<?php

namespace App\Observers;

use App\Models\EduZan;
use Spatie\Activitylog\Models\Activity;

class EduZanObserver
{
    /**
     * Handle the edu zan "created" event.
     *
     * @param  \App\Models\EduZan  $eduZan
     * @return void
     */
    public function created(EduZan $eduZan)
    {
//        dd('create');
        //可以使用模型对象的increment()方法指定给模型对象对应的数据表中某个字段增加值
        $eduZan -> getZanModel() ->increment('zan_num');
    }

    /**
     * Handle the edu zan "updated" event.
     *
     * @param  \App\Models\EduZan  $eduZan
     * @return void
     */
    public function updated(EduZan $eduZan)
    {
        //
    }

    /**
     * Handle the edu zan "deleted" event.
     *
     * @param  \App\Models\EduZan  $eduZan
     * @return void
     */
    public function deleted(EduZan $eduZan)
    {
        //模型观察器,这个laravel框架会自动执行,当使用观察器关联的模型对象执行delete()方法的时候,观察器中的delete方法也会执行
        $eduZan -> getZanModel() ->decrement('zan_num');
        //由于EduZan的create和update动作会被记入到系统的活动日志中,所以当取消点赞的时候,需要从系统动态中将之前的创建动态删除
        Activity::where('subject_type',get_class($eduZan))->where('subject_id',$eduZan['id'])->update(['is_active'=>0]);
    }

    /**
     * Handle the edu zan "restored" event.
     *
     * @param  \App\Models\EduZan  $eduZan
     * @return void
     */
    public function restored(EduZan $eduZan)
    {
        //
    }

    /**
     * Handle the edu zan "force deleted" event.
     *
     * @param  \App\Models\EduZan  $eduZan
     * @return void
     */
    public function forceDeleted(EduZan $eduZan)
    {
        //
    }
}
